package org.kaindorf.kainflix.metadata.instructionsv2_notworking;

import org.kaindorf.kainflix.metadata.repository.entity.Metadata;
import org.kaindorf.kainflix.metadata.service.MetaDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

// exactly according to instructions in V2
//@RestController
@RequestMapping("/metadata")
public class MetaDataController {

    @Autowired
    private MetaDataService metaDataService;

    @RequestMapping(method = RequestMethod.PUT) // sollte POST sein
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public String create(@RequestBody Metadata metaData) {
        return Long.toString(metaDataService.saveMetaData(metaData).getId());
    }

    @RequestMapping(method = RequestMethod.PUT) // sollte im Pfad ID übergeben
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody // sollte keiner sein
    public String update(@RequestBody Metadata metaData) {
        Metadata updatedMetaData = metaDataService.updateMetaData(metaData);
        return Long.toString(updatedMetaData.getId());
    }

    @RequestMapping(method = RequestMethod.DELETE) // sollte eigentlich im pfad die ID übergeben
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public void delete(@RequestBody Metadata metaData) {
        metaDataService.delete(metaData.getId());
    }

    @RequestMapping(method = RequestMethod.GET) // sollte eigentlich im pfad die ID übergeben
    @ResponseStatus(HttpStatus.OK)
    public Metadata read(@RequestBody Long metaDataId) {
        return metaDataService.getMetaDataById(metaDataId);
    }

    @RequestMapping(method = RequestMethod.POST) // sollte eigentlich GET sein
    @ResponseStatus(HttpStatus.OK)
    public Iterable<Metadata> readAll() {
        return metaDataService.getAllMetaData();
    }
}
